#pragma once

#include "Lona.h"
#include "Escalon.h"
#include "Columna.h"
#include "Losa.h"

#include "ShaderLoader.h"

#include <GL/glew.h>
#include <glm/glm.hpp> 
#include <glm/gtc/matrix_transform.hpp>

class Edificio{
private:
	const int m_pisos_edificio;
	const int m_ancho_losa;
	const int m_largo_losa;
	const float m_altura_piso;
	const float m_altura_escalon;
	const float m_profundidad_escalon;

	// Para la lona animada
	ShaderLoader m_shaderLona;
	Lona m_lona;

	// Para los escalones
	ShaderLoader m_shaderEscalon;
	Escalon m_escalon;

	ShaderLoader m_shaderColumna;
	Columna m_columna;

	ShaderLoader m_shaderLosa;
	Losa m_losa;

    glm::mat4 view_matrix;
	glm::mat4 projection_matrix;
    glm::vec4 light_position;
    glm::vec3 light_intensity;

	void Edificio::renderLona(const glm::mat4 &model_matrix);
	void Edificio::renderColumnaPlanta(const glm::mat4 &model_matrix);
	void Edificio::renderPlanta(const glm::mat4 &model_matrix, int p, int pisos);
	void Edificio::renderEscalon(const glm::mat4 &model_matrix);
	void Edificio::renderEscalera(const glm::mat4 &model_matrix, int p);
	void Edificio::renderEdificio(const glm::mat4 &model_matrix);

public:
	Edificio();
	virtual ~Edificio(void);

	void init(void);

	void dibujar(const glm::mat4 &viewMatrix, const glm::mat4 &projectionMatrix, const glm::vec4 &light_position, const glm::vec3 &light_intensity, const glm::mat4 &model);
};

